#include <stdio.h>
int *sp(int[]);

int main()
{
    int a[3] = {1, 3, 5}, i, *p;
    for (i = 0; i < 3; i++)
        printf("%d ", a[i]);
    printf("\n");
    p = sp(a);
    for (i = 0; i < 3; i++)
        printf("%d ", *(p + i));
    printf("\n");
    return 0;
}

// int *sp(int s[])
// {
//     int *p;
//     p = (int *)(malloc(3 * sizeof(s)));
//     *p++ = 2 + s[0];
//     *p++ = 4 + s[1];
//     *p = 6 - s[2] + *(p - 1);
//     p = p - 1; // 返回指针时，一定要保证分配给指针的是首地址。
//     return p;
// }

int *sp(int s[])
{
    int *p;
    p = (int *)(malloc(sizeof(s)));
    p[0] = 2 + s[0];
    p[1] = 4 + s[1];
    p[2] = 6 - s[2] + p[1];
    return p;
}


/*
每种数据类型都可定义相应的函数类型和指针函数，
并在函数里面使用“return”语句返回一个或多个返回值，
    但每次调用只有一个满足返回条件，而且返回值的类型必须与函数类型一致。
    除非出错时的强行退出，否则均绝无例外。

void不能定义数据类型，但可以定义函数和指针。
由于void类型的函数没有返回值，所以常用来输出信息。

*/